package com.effect.controller;


import com.effect.exception.ResultCode;
import com.effect.exception.ResultSetBO;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class BaseController {

    protected ResultSetBO success(String msg_zh, Object result) {
        return new ResultSetBO(200, msg_zh, result);
    }

    protected ResultSetBO success() {
        return ResultSetBO.success("success");
    }

    /**
     * 成功的返回结果
     * 可自定义msg 和 return
     */
    protected ResultSetBO success(ResultCode msgCodeEnum, Object result) {
        return ResultSetBO.universal(msgCodeEnum, result);
    }

    /**
     * 快速成功结果
     * 可自定义 return值
     *
     * @param result 结果
     * @return return
     */
    protected ResultSetBO success(Object result) {
        return ResultSetBO.success(result);
    }

    /**
     * 失败结果通用
     *
     * @param msgCodeEnum msgCode
     * @param result      base
     */
    protected ResultSetBO fail(ResultCode msgCodeEnum, Object result) {

        return ResultSetBO.universal(msgCodeEnum, result);
    }

    /**
     * 失败结果快速
     *
     * @param result base
     */
    protected ResultSetBO fail(Object result) {

        return ResultSetBO.fail(result);
    }


    /**
     * 返回结果
     */
    protected ResultSetBO fail(Integer code, String msg_zh, Object result) {
        if (code == null) {
            code = -100;
        }
        return new ResultSetBO(code, msg_zh, result);
    }

    protected ResultSetBO fail(String msg_zh, Object result) {
        return new ResultSetBO(-100, msg_zh, result);
    }

    // 删除的返回结果
    protected ResultSetBO delResult(Integer state) {
        if (state == 1) {
            return success(ResultCode.ENABLE_SUCCESS, null);
        } else if (state == 0) {
            return success(ResultCode.DISABLED_SUCCESS, null);
        } else {
            return success(ResultCode.DELETE_SUCCESS, null);
        }
    }

    // 条件是否为空
    private boolean isEmpty(Object obj) {
        if (obj == null) {
            return true;
        } else if (obj instanceof String) {
            return "".equals(obj);
        } else if (obj instanceof Integer) {
            return (Integer) obj <= 0;
        } else if (obj instanceof Long) {
            return (Long) obj <= 0;
        } else if (obj instanceof Float) {
            return (Float) obj <= 0;
        } else if (obj instanceof Double) {
            return (Double) obj <= 0;
        } else {
            return false;
        }
    }

    // 判断多个条件是否为空 obj 是一个Object数组
    public boolean isEmpty(Object... obj) {
        // 遍历Object数组
        for (Object o : obj) {
            if (isEmpty(o)) {
                return true;
            }
        }
        return false;
    }


    /**
     * 验证码效验
     * -101 验证码失效
     * -102 验证码错误
     * 200  成功
     */
//    public ResultSet<Object> confirmSmsCode(RedisHelper redisHelper, String tel, String code, SmsCodeListener listener) {
////         从redis中取出用户的验证码
//        String realCode = redisHelper.getKey("sms_" + tel);
////         如果redis中没有验证码 那么说明用户未发送或者已失效
//        if (realCode == null || "".equals(realCode)) {
//            return failedResult(null, "验证码无效，请重新发送");
//        }
//        // 真实验证码不等于用户输入的验证码
//        if (!realCode.equals(code)) {
//            return failedResult(null, "验证码错误");
//        }
//        redisHelper.delKey("sms_" + tel);
//        return listener.SmsCodeSuccessListener();
//    }


}
